﻿#pragma once
#include <memory>
#include <map>
#include <string>
#include <list>
#include "StrategyBase.h"
#include "tradebase_global.h"

class TRADEBASE_EXPORT StrategyManager
{
public:
	StrategyManager();
	~StrategyManager();
	// 初始化策略
	void InitStrategy();
	// 保存策略配置
	void SaveStrategy();
	// 根据合约读取配置返回1个策略
	StrategyBase *GetStrategy(const std::string &pSymbol, UsrTradeInterface *tradeHandler);

	// 返回策略名称
	std::string GetStrategyName(const std::string &pSymbol);
	// 设置策略
	void SetStrategy(const std::string &pSymbol, const std::string &pStrategyName);
	// 设置默认策略
	void SetDefaultStrategy(const std::string &pDefaultStrategy);
	// 返回默认策略
	std::string GetDefaultStrategy();
private:
	// 保存策略
	void saveStrategyFile();
	// 读取策略
	void readStrategyFile();
	// 根据策略名称找到所属的库
	QString getLibPath(const std::string pStrategyName);

	std::map<std::string, std::string> m_strategyMap;  // <合约名称，策略名称> 策略名称即为dll名称
	std::map<std::string, StrategyBase *> m_strategyHandle; // <策略名称，策略指针>
	// 默认的策略名称
	std::string m_defaultStrategy;
};

